package cn.yeziji.forum.dao.iquery;

import cn.org.atool.fluent.mybatis.base.crud.IQuery;
import cn.org.atool.fluent.mybatis.base.crud.JoinBuilder;
import cn.yeziji.forum.dto.tags.ForumTagsDTO;
import cn.yeziji.forum.wrapper.ForumDetailsQuery;
import cn.yeziji.forum.wrapper.ForumTagsQuery;

import java.util.List;

/**
 * 标签条件查询构造器
 *
 * @author gzkemays
 * @since 2022/3/28 20:51
 */
public class TagsQuery {
  /**
   * 动态全局查询或者分页查询
   *
   * @param dto 标签的 dto 对象
   * @return 动态查询
   */
  public static ForumTagsQuery selectTagsSize(ForumTagsDTO dto) {
    if (!dto.isAll()) {
      return new ForumTagsQuery().select.tags().end().limit(dto.getSize(), dto.getLimit());
    }
    return new ForumTagsQuery().select.tags().end();
  }
  /**
   * 根据 tags 来查询 tags
   *
   * @param tags tags 列表
   * @return 条件查询构造器
   */
  public static ForumTagsQuery selectTagsByInTags(List<String> tags) {
    return new ForumTagsQuery().select.tags().end().where().tags().in(tags).end();
  }

  /**
   * 根据用户昵称的文章筛选出对应已有的标签
   *
   * @param nickname 用户昵称
   */
  public static IQuery selectTagsByNicknameDetails(String nickname) {
    return JoinBuilder.from(
            new ForumDetailsQuery("fd")
                .select("distinct ft.tags")
                .where
                .author()
                .eq(nickname)
                .end())
        .leftJoin(new ForumTagsQuery("ft").where.tags().notNull().end().orderBy.tags().asc().end())
        .onApply("fd.tags like ft.tags")
        .endJoin()
        .build();
  }
}
